home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / eshot / 2 / eshot.c next >
C/C++ Source or Header  |  2000-07-07  |  3KB  |  116 lines

  1. /* eshot.c */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. #include <sys/iocs.h>
  7. #include "XSP2lib.H"
  8.  
  9. #define PCG_MAX    32        /* パターンデータの個数 */
  10.  
  11. static char pcg_alt[PCG_MAX + 1];    /* PCG配置管理テーブル */
  12. static char pcg_dat[PCG_MAX * 128];    /* PCGデータファイル読み込みバッファ */
  13.  
  14. static unsigned short pal_dat[16][15];    /* パレットデータ */
  15.  
  16.  
  17. signed short eshot_x;        /* 敵弾のX座標 */
  18. signed short eshot_y;        /*  〃 Y座標 */
  19. unsigned char eshot_use;    /*  〃が画面上に存在するか(=0 なら存在しない) */
  20.  
  21.  
  22.  
  23. int main (int argc, char *argv[])
  24. {
  25.     FILE *fp;
  26.     int i, j;
  27.     int game_over = 0;
  28.  
  29.     if (argc != 1) {
  30.         printf (
  31.                    "敵弾テストその2 ESHOT.X\n"
  32.                    "        programmed by Mitsuky <FreeSoftware>\n"
  33.                    "弾1発だけ発射可能バージョン\n"
  34.             );
  35.         exit (-1);
  36.     }
  37.     _iocs_crtmod (10);    /* 256x256ドット グラフィック画面 256色 2画面 */
  38.     _iocs_sp_init ();    /* スプライトの初期化 */
  39.     _iocs_sp_on ();
  40.  
  41.     /* pcg_dat にパターンデータを読み込む */
  42.     fp = fopen ("ESHOT.SP", "rb");
  43.     fread (pcg_dat, sizeof (char), PCG_MAX * 128, fp);
  44.     fclose (fp);
  45.  
  46.     /* pal_buf に一旦パレットデータを読み込む */
  47.     fp = fopen ("ESHOT.PAL", "rb");
  48.     fread (pal_dat, sizeof (unsigned short), 16 * 15, fp);
  49.     fclose (fp);
  50.     /* パレットデータを定義 */
  51.     /* (1パレットブロック=16色) × (15ブロックぶん) 定義する */
  52.     {
  53.         unsigned short *p = (unsigned short *) pal_dat;
  54.         for (i = 1; i < 15; i++)
  55.             for (j = 0; j < 16; j++)
  56.                 _iocs_spalet (0x80000000 | j, i, *p++);
  57.     }
  58.  
  59.     xsp_on ();
  60.     xsp_mode (3);
  61.     /* パターンデータを定義 */
  62.     xsp_pcgdat_set (pcg_dat, pcg_alt, sizeof (pcg_alt));
  63.  
  64.  
  65.  
  66.     /* ここからが今回の見所 */
  67.     printf ("ジョイスティックの\n"
  68.         " [B] ボタンを押すと弾を撃ちます\n"
  69.         " [A] ボタンを押すと終了します\n");
  70.  
  71.  
  72.     eshot_use = 0;        /* 敵弾は画面上に存在していないことにする */
  73.  
  74.     do {
  75.         xsp_vsync (0);    /* 垂直同期待ち */
  76.         j = _iocs_joyget (0);    /* ジョイスティック0番 */
  77.  
  78.         /* [A] ボタンが押されたか? */
  79.         if ((j & 0b00100000) == 0)
  80.             game_over = !0;        /* ゲームオーバーに */
  81.  
  82.         /* [B] ボタンが押されたか? */
  83.         if ((j & 0b1000000) == 0) {
  84.             /* 敵弾は画面上に存在するか? */
  85.             if (eshot_use == 0) {
  86.                 /* 存在しないなら敵弾を座標(32,32)に発生 */
  87.                 eshot_use = 1;
  88.                 eshot_x = 32;
  89.                 eshot_y = 32;
  90.             }
  91.         }
  92.         /* 敵弾移動処理 */
  93.         /* 敵弾は画面上に存在するか? */
  94.         if (eshot_use != 0) {
  95.             /* 存在していれば移動 */
  96.             eshot_x += 4;    /* 4ドット右に移動 */
  97.             eshot_y += 4;    /* 4ドット下に移動 */
  98.  
  99.             /* 画面外にでたら敵弾を消去(未使用)に */
  100.             if ((eshot_x > 256) || (eshot_y > 256)) {
  101.                 eshot_use = 0;
  102.             } else {
  103.                 /* 座標(eshot_x,eshot_y), スプライト No.1, パレット3, 優先順位 $3f */
  104.                 xsp_set (eshot_x, eshot_y, 1, 0x033f);
  105.             }
  106.         }
  107.         xsp_out ();    /* 表示 */
  108.     }
  109.     while (!game_over);
  110.  
  111.     xsp_off ();
  112.  
  113.     _iocs_crtmod (16);
  114.     return (0);
  115. }
  116.